package com.it.tydic.estate.module.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.it.tydic.estate.common.aop.CodeMsg;
import com.it.tydic.estate.common.aop.Result;
import com.it.tydic.estate.common.util.InstaIdGenerator;
import com.it.tydic.estate.common.util.StringUtils;
import com.it.tydic.estate.common.util.TimeUtil;
import com.it.tydic.estate.common.util.ZfbjFinalUtil;
import com.it.tydic.estate.module.mapper.inner.TbCkglCkdaMapper;
import com.it.tydic.estate.module.mapper.inner.TbCkglRkckglMapper;
import com.it.tydic.estate.module.model.inner.TbCkglCkda;
import com.it.tydic.estate.module.model.inner.TbCkglRkckdmx;
import com.it.tydic.estate.module.model.inner.TbCkglRkckgl;
import com.it.tydic.estate.module.model.inner.TbCkglWpda;
import com.it.tydic.estate.module.service.CkdaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.util.StringUtil;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Transactional
@Service
public class CkdaServiceImpl implements CkdaService {

    @Autowired
    private TbCkglCkdaMapper tbCkglCkdaMapper;
    @Autowired
    private TbCkglRkckglMapper rkckglMapper;
    /**
     * 物品档案新增修改
     * @param ckda
     * @return
     */
    @Override
    public Result insertOrUpdate(TbCkglCkda ckda) {
        //必传项参数校验
        if(StringUtil.isEmpty(ckda.getCkdm()) || StringUtil.isEmpty(ckda.getCkmc()) || StringUtil.isEmpty(ckda.getUserId())){
            return  Result.error(CodeMsg.EMPTY_PARAM_ERROR);
        }
        if(StringUtil.isEmpty(ckda.getId())){//判断如果为空新增
            if(checkName(ckda)){
                return  Result.error(CodeMsg.DATA_REPEATE);
            }
            ckda.setId(String.valueOf(new InstaIdGenerator().nextId(TimeUtil.timeGen())));
            ckda.setZfbj("0");
            ckda.setCreateTime(new Date());
            ckda.setUpdateTime(new Date());
            int index = tbCkglCkdaMapper.insert(ckda);
            if(index==0){
                return  Result.error(CodeMsg.INSERT_ERROR);
            }
        }else {//修改
            ckda.setUpdateTime(new Date());
            int index = tbCkglCkdaMapper.updateByPrimaryKeySelective(ckda);
            if(index==0){
                return  Result.error(CodeMsg.UPDATE_ERROR);
            }
        }
        return Result.success(ckda.getId());
    }
    /**
     * 验证仓库名称是否重复
     * @param ckda
     * @return
     */
    private boolean checkName(TbCkglCkda ckda) {
        boolean flag =false;
        Example example = new Example(TbCkglCkda.class);
        example.createCriteria().andEqualTo("userId", ckda.getUserId()).
                andEqualTo("ckmc", ckda.getCkmc()).
                andEqualTo("zfbj", ZfbjFinalUtil.zfbj_zy);
        int num = tbCkglCkdaMapper.selectCountByExample(example);
        if (num > 0)
            flag=true;
        return flag;
    }
    /**
     * 根据主键查询
     * @param id
     * @return
     */
    @Override
    public Result getById(String id) {
        if(StringUtil.isEmpty(id)){
            return Result.error(CodeMsg.EMPTY_PARAM_ERROR);
        }
        TbCkglCkda tbCkglCkda = tbCkglCkdaMapper.selectByPrimaryKey(id);
        if(tbCkglCkda==null){
            return Result.error(CodeMsg.DATA_NOT_EXIST);
        }
        return Result.success(tbCkglCkda);
    }
    /**
     * 列表页面查询
     * @param map
     * @return
     */
    @Override
    public Result pageList(Map<String,Object> map) {
        if(isNotNull(map)){//参数验证
            Map<String,Object> dataMap = new HashMap<>();
            Example example = new Example(TbCkglCkda.class);
            PageHelper.startPage((Integer) map.get("pageNum"),(Integer)map.get("pageSize"));
            setExample(example,map);//添加查询条件
            Page<TbCkglCkda> pageList = (Page<TbCkglCkda>) tbCkglCkdaMapper.selectByExample(example);
            dataMap.put("data",pageList.getResult());
            dataMap.put("totle",pageList.getTotal());
            return Result.success(dataMap);
        }
        return Result.error(CodeMsg.INTER_ERROR);
    }

    /**
     * 添加列表查询条件
     * @param example
     * @param map
     */
    private void setExample(Example example, Map<String, Object> map) {
        example.setOrderByClause("UPDATE_TIME DESC");
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("zfbj","0").andEqualTo("userId",map.get("userId"));
        if(StringUtils.isNotEmpty(String.valueOf(map.get("ckdm")))){
            criteria.andLike("ckdm","%"+String.valueOf(map.get("ckdm"))+"%");
        }
        if(StringUtils.isNotEmpty(String.valueOf(map.get("ckmc")))){
            criteria.andLike("ckmc","%"+String.valueOf(map.get("ckmc"))+"%");
        }
        if(StringUtils.isNotEmpty(String.valueOf(map.get("ckdz")))){
            criteria.andLike("ckdz","%"+String.valueOf(map.get("ckdz"))+"%");
        }
        if(StringUtils.isNotEmpty(String.valueOf(map.get("lxr")))){
            criteria.andLike("lxr","%"+String.valueOf(map.get("lxr"))+"%");
        }
        if(StringUtils.isNotEmpty(String.valueOf(map.get("lxdh")))){
            criteria.andLike("lxdh","%"+String.valueOf(map.get("lxdh"))+"%");
        }
        if(StringUtils.isNotEmpty(String.valueOf(map.get("bz")))){
            criteria.andLike("bz","%"+String.valueOf(map.get("bz"))+"%");
        }

    }

    /**
     * 根据主键删除
     * @param id
     * @return
     */
    @Override
    public Result deleteById(String id) {
        if(StringUtil.isEmpty(id)){
            return Result.error(CodeMsg.EMPTY_PARAM_ERROR);
        }
        Example rkckdmxExample = new Example(TbCkglRkckgl.class);
        Example.Criteria criteria = rkckdmxExample.createCriteria();
        criteria.andEqualTo("szck", id).andEqualTo("zfbj",ZfbjFinalUtil.zfbj_zy);;
        int count=countRoleByExample(rkckdmxExample);
        //判断资源有没有被占用
        if(count>0){
            return Result.error(CodeMsg.RESOURCE_USE);
        }
        TbCkglCkda tbCkglCkda = new TbCkglCkda();
        tbCkglCkda.setZfbj("1");
        tbCkglCkda.setId(id);
        tbCkglCkdaMapper.updateByPrimaryKeySelective(tbCkglCkda);
        return Result.success();
    }
    /**
     * 根据ids 批量删除
     * @param ids 主键ids数组
     * @return
     */
    @Override
    public Result deleteByIds(List<String> ids) {
        if (ids.size() == 0) {
            return  Result.error(CodeMsg.INTER_ERROR,null);
        }
        Example rkckdmxExample = new Example(TbCkglRkckgl.class);
        Example.Criteria criteria = rkckdmxExample.createCriteria();
        criteria.andIn("szck", ids).andEqualTo("zfbj",ZfbjFinalUtil.zfbj_zy);;
        int count=countRoleByExample(rkckdmxExample);
        //判断资源有没有被占用
        if(count>0){
            return Result.error(CodeMsg.RESOURCE_USE);
        }
        TbCkglCkda tbCkglCkda = new TbCkglCkda();
        tbCkglCkda.setZfbj("1");
        Example example = new Example(TbCkglCkda.class);
        example.createCriteria().andIn("id",ids);
        int result = tbCkglCkdaMapper.updateByExampleSelective(tbCkglCkda,example);
        if (result == ids.size()) {
            return  Result.success(CodeMsg.SUCCESS);
        }
        return Result.error(CodeMsg.INTER_ERROR, null);
    }

    /**
     *验证map参数
     */
    private Boolean isNotNull(Map<String,Object> map) {
        if(StringUtil.isEmpty(String.valueOf(map.get("pageNum")) )|| StringUtil.isEmpty(String.valueOf(map.get("pageSize")))){
            return false;
        }
        return true;
    }
    public int countRoleByExample(Example example){
        return rkckglMapper.selectCountByExample(example);
    }
}
